Exactly once delivery
あるシステムから別のシステムへメッセージを送信する場合、そのメッセージは正確に一度だけ相手のシステムに到達すること
Martin Kleppmannは著書データ指向アプリケーションデザインの中で、この言葉はEffectively Once Processingと言い換えるべきだと書いている
仕組み
メッセージを送信したシステムがACKを得る前にダウンした場合、同じメッセージを再び生成する
中間に位置するブローカーは重複排除が必要
メッセージのコンシューマ(受信者)が、受信したメッセージに対するACKを送信する前に死んでしまうと、再び同じメッセージを受信することになる
Idempotencyが必要
システム全体を見ると、コンシューマは同じメッセージを複数回受け取りうるが、処理は一度だけにして後から受け取ったメッセージに副作用が出ないようにする